package violencerecursion;

import java.util.LinkedList;
import java.util.List;

/**
 * @author tongchen
 * @create 2023-03-15 17:17
 */
public class FullArrangement {
    public static void main(String[] args) {
        String s="abc";
        System.out.println(arrange(s));
    }
    public static List<String> arrange(String s){
        //将字符串转化为字符数组
        char []chars=s.toCharArray();
        //创建结果集
        LinkedList<String> list = new LinkedList<>();
        //递归处理
        process(chars,0,list);
        return list;
    }

    private static void process(char[] chars, int i, LinkedList<String> strings) {
        //递归的出口
        if(i== chars.length){
            strings.add(String.valueOf(chars));
            return ;
        }
        //循环递归（思路：从当前结点开始往下的下标都能进行全排列，之前的结点都已经排列好了）
        for(int j=i;j< chars.length;++j){
            //交换其中两个
            swap(chars,i,j);
            //从此往下继续递归
            process(chars, i+1, strings);
            //恢复
            swap(chars, i,j );
        }
    }

    private static void swap(char[] chars, int i, int j) {
        char temp=chars[i];
        chars[i]=chars[j];
        chars[j]=temp;
    }
}
